import time
import random
import urllib.parse
# 导入验证码模型类
from users.models import Code


# 生成手机验证码
def codes():
    # 随机生成六位验证码
    passwd = ""
    for i in range(6):
        passwd += str(random.randint(0, 9))
    return passwd


# 生成验证码并保存到数据库
def log_codes(phone, type_id):
    # 生成验证码
    code_num = codes()
    # 过期时间
    time_num = int(time.time()) + 60
    # 判断数据库是否发过这个手机号的验证码
    if Code.objects.filter(phone=phone).exists():
        # 判断是登录验证码还是注册
        if type_id == "登录验证码":
            # 修改验证码和有效期
            user_data = Code.objects.get(phone=phone)
            user_data.code = code_num  # 验证码
            user_data.time = time_num  # 时间
            user_data.save()  # 保存
            # 发送验证码
            send_log_code(phone, code_num)
        elif type_id == "注册验证码":
            # 修改验证码和有效期
            user_data = Code.objects.get(phone=phone)
            user_data.reg_code = code_num  # 验证码
            user_data.reg_time = time_num  # 时间
            user_data.save()  # 保存
            # 发送验证码
            send_reg(phone, code_num)
        elif type_id == "修改密码验证码":
            user_data = Code.objects.get(phone=phone)
            user_data.pwd_code = code_num  # 验证码
            user_data.pwd_time = time_num  # 时间
            user_data.save()  # 保存
            # 发送验证码
            send_update_pwd(phone, code_num)
        elif type_id == "更换手机号验证码":
            pass
        return True
    else:
        # 没有发过就添加
        # 判断是登录验证码还是注册
        if type_id == "登录验证码":
            Code(phone=phone, code=code_num, time=time_num).save()
            # 发送验证码
            send_log_code(phone, code_num)
        elif type_id == "注册验证码":
            Code(phone=phone, reg_code=code_num, reg_time=time_num).save()
            # 发送验证码
            send_reg(phone, code_num)
        return True


# 发送注册验证码
def send_reg(phone, code_num):
    # 短信接口地址
    url = 'http://106.ihuyi.com/webservice/sms.php?method=Submit'
    # 定义请求的数据
    values = {
        'account': 'C21094890',  # 用户名
        'password': 'b95636db0c2e3ca45f672d74bf096d7e',  # APIkey
        'mobile': phone,  # 要发送的号码
        'content': f'您的验证码是：{code_num}，请尽快完成注册，如非本人操作，请忽略此短信',  # 发送的
        'format': 'json',  # 格式类型
    }
    # 将数据进行编码
    phone_data = urllib.parse.urlencode(values).encode(encoding='UTF8')
    # 发起请求
    req = urllib.request.Request(url, phone_data)
    response = urllib.request.urlopen(req)
    resp = response.read()


# 发送登录验证码
def send_log_code(phone, code_num):
    # 短信接口地址
    url = 'http://106.ihuyi.com/webservice/sms.php?method=Submit'
    # 定义请求的数据
    values = {
        'account': 'C21094890',  # 用户名
        'password': 'b95636db0c2e3ca45f672d74bf096d7e',  # APIkey
        'mobile': phone,  # 要发送的号码
        'content': f'验证码为：{code_num}，您正在登录，若非本人操作，请勿泄露。',  # 发送的
        'format': 'json',  # 格式类型
    }
    # 将数据进行编码
    phone_data = urllib.parse.urlencode(values).encode(encoding='UTF8')
    # 发起请求
    req = urllib.request.Request(url, phone_data)
    response = urllib.request.urlopen(req)
    resp = response.read()


# 修改密码验证码
def send_update_pwd(phone, code_num):
    # 短信接口地址
    url = 'http://106.ihuyi.com/webservice/sms.php?method=Submit'
    # 定义请求的数据
    values = {
        'account': 'C21094890',  # 用户名
        'password': 'b95636db0c2e3ca45f672d74bf096d7e',  # APIkey
        'mobile': phone,  # 要发送的号码
        'content': f'您的验证码是：{code_num}，请尽快完成密码修改，验证码1分钟内有效，如非本人操作，请忽略此短信。',  # 发送的
        'format': 'json',  # 格式类型
    }
    # 将数据进行编码
    phone_data = urllib.parse.urlencode(values).encode(encoding='UTF8')
    # 发起请求
    req = urllib.request.Request(url, phone_data)
    response = urllib.request.urlopen(req)
    resp = response.read()


# 更换手机号验证码
def send_replace_phone(phone, code_num):
    # 短信接口地址
    url = 'http://106.ihuyi.com/webservice/sms.php?method=Submit'
    # 定义请求的数据
    values = {
        'account': 'C21094890',  # 用户名
        'password': 'b95636db0c2e3ca45f672d74bf096d7e',  # APIkey
        'mobile': phone,  # 要发送的号码
        'content': f'验证码为：{code_num}，您正在绑定手机号，请妥善保管账户信息，如非本人操作，请忽略此短信。',  # 发送的
        'format': 'json',  # 格式类型
    }
    # 将数据进行编码
    phone_data = urllib.parse.urlencode(values).encode(encoding='UTF8')
    # 发起请求
    req = urllib.request.Request(url, phone_data)
    response = urllib.request.urlopen(req)
    resp = response.read()
